package org.fanximall.erp.product.domain.repository;

import org.fanximall.erp.common.page.PageResponse;
import org.fanximall.erp.common.tree.TreeDefinitionModel;
import org.fanximall.erp.product.domain.aggregate.CategoryAggregateRoot;
import org.fanximall.erp.product.domain.dto.CategoryPageQueryDTO;
import org.fanximall.erp.product.domain.dto.CategoryTreeModel;
import org.fanximall.erp.product.domain.model.ProductCategoryModel;
import org.fanximall.erp.product.domain.model.ProductLeafCategoryModel;

import java.util.List;

/**
 * @author :  william
 * @version :  V1.0  created in 2024/4/30
 * 类目存储层
 */
public interface CategoryRepository {


    /**
     * 保存类目
     *
     * @param productCategoryModel 类目信息
     */
    void saveCategory(ProductCategoryModel productCategoryModel);


    /**
     * 保存叶子类目
     *
     * @param productLeafCategoryModel 叶子类目信息
     */
    void saveLeafCategory(ProductLeafCategoryModel productLeafCategoryModel);


    /**
     * 修改叶子类目信息
     *
     * @param productLeafCategoryModel 叶子类目
     */
    void updateLeafCategory(ProductLeafCategoryModel productLeafCategoryModel);


    /**
     * 修改类目信息
     *
     * @param productCategoryModel 类目信息
     */
    void updateCategory(ProductCategoryModel productCategoryModel);

    /**
     * 根据类目名称查询类目
     * @param categoryName
     * @return
     */
    List<ProductCategoryModel> getCategoryByCategoryName(String categoryName,String categoryNameEn);


    /**
     * 根据状态及名称查询所有的类目信息
     *
     * @param state
     * @return
     */
    List<ProductCategoryModel> getAllCategory(Integer state,String name);


    /**
     * @param categoryPageQueryDTO 分页查询对象
     * @return
     */
    PageResponse<CategoryAggregateRoot> pageQueryAttributeItem(CategoryPageQueryDTO categoryPageQueryDTO);


    /**
     * 根据类目id 查询类目及叶子类目信息
     *
     * @param categoryId
     * @return
     */
    CategoryAggregateRoot getCategoryByCategoryId(Long categoryId);



    /**
     * 获取所有的父节点
     * @param categoryId
     * @return
     */
    List<ProductCategoryModel> getAllParent(Long categoryId);
}
